{layout name="../../admin/view/layout/main" /}
{:breadcrumb(['UI 示例:example/layout/index', '上传插件:example/upload/index', 'webuploader插件'])}
<div class="row">

    <div class="col-lg-12">
      <div class="card">
        <header class="card-header">
          <div class="card-title">上传插件 webuploader</div>
        </header>
        <div class="card-body">
        
          <p>webuploader示例在模板的示例页面-新增文档中已有，这里再做下单图和多图。示例中用到的后端为php，请在php环境下执行。</p>
        <form action="#" method="post" onsubmit="return false;" id="example-form" class="row">
          <div class="mb-3 col-md-12">
            <label class="form-label">单图片上传</label>

            <div class="js-upload-image">
              <input type="hidden" name="one_pic" data-multiple="false" data-size="2048000" data-ext='gif,jpg,jpeg,bmp,png' id="one_pic" value="">
              <div id="picker_one_pic">上传单张图片</div>
              <!--ul用来存放图片预览-->
              <ul id="file_list_one_pic" class="list-inline row lyear-uploads-pic mb-0"></ul>
            </div>
            
          </div>
          <div class="mb-3 col-md-12">
            <label class="form-label">多图片上传</label>

            <div class="js-upload-images">
              <input type="hidden" name="more_pics" data-multiple="true" data-size="2048000" data-ext='gif,jpg,jpeg,bmp,png' id="more_pic" value="">
              <div id="picker_more_pics">上传多张图片</div>
              <!--ul用来存放图片预览-->
              <ul id="file_list_more_pics" class="list-inline row lyear-uploads-pic mb-0">
                
              </ul>
            </div>
            
          </div>
        </form>
        
        </div>
      </div>
  </div>

</div>

<script type="text/javascript">
    $(function() {
        /*
         * 示例上传成功采用返回ID的形式，即上传成功以附件表形式存储，返回给前端ID值。
         * 成功返回示例：{"status":200,"info":"成功","class":"success","id":1,"picurl":".\/upload\/images\/lyear_5ddfc00174bbb.jpg"}
         * 这里设定单图上传为js-upload-image，多图上传为js-upload-images
         * 存放预览图的div元素，命名：file_list_*；后面的上传按钮的命名：filePicker_*（这里的*跟隐藏的input的name对应）。方便单页面中存在有多个上传时区分以及使用。
         * input上保存上传后的图片ID以及设置上传时的一些参数，
         */
        
        // 通用绑定，
        $('.js-upload-image,.js-upload-images').each(function() {
            var $input_file      = $(this).find('input'),
                $input_file_name = $input_file.attr('name'),
                $multiple        = $input_file.data('multiple'),  // 是否选择多个文件
                $ext             = $input_file.data('ext'),       // 支持的文件后缀，示例以图片为例
                $size            = $input_file.data('size');      // 支持最大的文件大小
            var $file_list = $('#file_list_' + $input_file_name);
            var ratio = window.devicePixelRatio || 1;
            var thumbnailWidth = 165 * ratio;
            var thumbnailHeight = 110 * ratio;
            
            var uploader = WebUploader.create({
                auto: true,
                duplicate: true,
                resize: false,
                swf: './js/webuploader/Uploader.swf',
                server: "{:url('example/upload/upload_image')}",
                pick: {
                    id: '#picker_' + $input_file_name,
                    multiple: $multiple
                },
                fileSingleSizeLimit: $size,
                accept: {
                    title: 'Images',
                    extensions: $ext,
                    mimeTypes: 'image/*'
                }
            });
            
            uploader.on('fileQueued', function(file) {
                
                var $li = $('<li class="col-6 col-sm-3 col-md-2 list-images-item" id="' + file.id + '">' +
                            '  <figure>' +
                            '    <img>' +
                            '    <figcaption>' +
                            '      <a class="btn btn-round btn-primary btn-link-pic" href="#!"><i class="mdi mdi-eye"></i></a>' +
                            '      <a class="btn btn-round btn-danger btn-remove-pic" href="#!"><i class="mdi mdi-delete"></i></a>' +
                            '    </figcaption>' +
                            '  </figure>' +
                            '</li>'),
                    $img = $li.find('img');
                
                if ($multiple) {
                    $file_list.append($li);
                } else {
                    $file_list.html($li);
                    $input_file.val('');
                }
                uploader.makeThumb(file, function(error, src) {
                    if (error) {
                        $img.replaceWith('<span>不能预览</span>');
                        return;
                    }
                    $img.attr('src', src);
                }, thumbnailWidth, thumbnailHeight);
                $('<div class="progress progress-sm"><div class="progress-bar progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"></div></div>').appendTo($li);
            });
            uploader.on('uploadProgress', function(file, percentage) {
                var $percent = $('#' + file.id).find('.progress-bar');
                $percent.css('width', percentage * 100 + '%');
            });
            uploader.on('uploadSuccess', function(file, response) {
                var $li = $('#' + file.id);
                if (response.status == 200) { // 返回200成功，这里可以根据你自己的返回状态值自己设置
                    if ($multiple) {
                        if ($input_file.val()) {
                            $input_file.val($input_file.val() + ',' + response.id);
                        } else {
                            $input_file.val(response.id);
                        }
                        $li.find('.btn-remove-pic').attr('data-id', response.id);
                    } else {
                        $input_file.val(response.id);
                    }
                }
                $('<div class="' + response.class + '"></div>').text(response.info).appendTo($li);
                $li.find('a.btn-link-pic').attr('href', response.picurl);
            });
            uploader.on('uploadError', function(file) {
                var $li = $('#' + file.id);
                $('<div class="bg-danger error">上传失败</div>').appendTo($li);
            });
            uploader.on('error', function(type) {
                switch (type) {
                case 'Q_TYPE_DENIED':
                    showNotify('图片类型不正确，只允许上传后缀名为：' + $ext + '，请重新上传！', 'danger', 1500);
                    break;
                case 'F_EXCEED_SIZE':
                    showNotify('图片不得超过' + ($size / 1024) + 'kb，请重新上传！', 'danger', 1500);
                    break;
                }
            });
            uploader.on('uploadComplete', function(file) {
                setTimeout(function() {
                    $('#' + file.id).find('.progress').remove();
                }, 500);
            });
            // 删除操作
            $file_list.delegate('.btn-remove-pic', 'click', function() {
                if (confirm("你确认要删除该图片吗?")) { // 可改为对话框插件
                    if ($multiple) {
                        var id = $(this).data('id'),
                        ids = $input_file.val().split(',');
                        if (id) {
                            for (var i = 0; i < ids.length; i++) {
                                if (ids[i] == id) {
                                    ids.splice(i, 1);
                                    break;
                                }
                            }
                            $input_file.val(ids.join(','));
                        }
                    } else {
                        $input_file.val('');
                    }
                    $(this).closest('.list-images-item').remove();
                }
            });
            // 接入图片查看插件
            $(this).magnificPopup({
                delegate: 'a.btn-link-pic',
                type: 'image',
                gallery: {
                    enabled: true
                }
            });
        });
    });
    </script>